package com.ruoyi.mapper.traceability;

import java.util.List;
import com.ruoyi.domain.traceability.MesTraceabilityRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 追溯记录Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-01
 */
@Mapper
public interface MesTraceabilityRecordMapper {
    /**
     * 查询追溯记录
     * 
     * @param traceId 追溯记录主键
     * @return 追溯记录
     */
    public MesTraceabilityRecord selectMesTraceabilityRecordByTraceId(Long traceId);

    /**
     * 查询追溯记录列表
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectMesTraceabilityRecordList(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 新增追溯记录
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 结果
     */
    public int insertMesTraceabilityRecord(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 修改追溯记录
     * 
     * @param mesTraceabilityRecord 追溯记录
     * @return 结果
     */
    public int updateMesTraceabilityRecord(MesTraceabilityRecord mesTraceabilityRecord);

    /**
     * 删除追溯记录
     * 
     * @param traceId 追溯记录主键
     * @return 结果
     */
    public int deleteMesTraceabilityRecordByTraceId(Long traceId);

    /**
     * 批量删除追溯记录
     * 
     * @param traceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMesTraceabilityRecordByTraceIds(Long[] traceIds);

    /**
     * 根据追溯编号查询追溯记录
     * 
     * @param traceCode 追溯编号
     * @return 追溯记录
     */
    public MesTraceabilityRecord selectMesTraceabilityRecordByTraceCode(@Param("traceCode") String traceCode);

    /**
     * 根据工单ID查询追溯记录
     * 
     * @param workOrderId 工单ID
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectTraceabilityByWorkOrderId(@Param("workOrderId") Long workOrderId);

    /**
     * 根据批次号查询追溯记录
     * 
     * @param batchCode 批次号
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectTraceabilityByBatchCode(@Param("batchCode") String batchCode);

    /**
     * 根据产品ID查询追溯记录
     * 
     * @param productId 产品ID
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectTraceabilityByProductId(@Param("productId") Long productId);

    /**
     * 根据追溯类型查询追溯记录
     * 
     * @param traceType 追溯类型
     * @return 追溯记录集合
     */
    public List<MesTraceabilityRecord> selectTraceabilityByType(@Param("traceType") String traceType);

    /**
     * 校验追溯编码是否唯一
     * 
     * @param traceCode 追溯编码
     * @return 追溯记录
     */
    public MesTraceabilityRecord checkTraceCodeUnique(@Param("traceCode") String traceCode);

    /**
     * 批量插入追溯记录
     * 
     * @param traceabilityRecords 追溯记录列表
     * @return 结果
     */
    public int batchInsertTraceabilityRecord(@Param("list") List<MesTraceabilityRecord> traceabilityRecords);
}